import { isArray } from "@/utils/is.js";
// 返回项目路径
export function getNormalPath(p) {
    if (p.length === 0 || !p || p == "undefined") {
        return p;
    }
    let res = p.replace("//", "/");
    if (res[res.length - 1] === "/") {
        return res.slice(0, res.length - 1);
    }
    return res;
}
/**
 * @description 设置字体
 */
export function setFontSize(res) {
    const clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    if (!clientWidth) return;
    let fontSize = clientWidth / 1920;
    return res * fontSize;
}
/**
 * @description 获取localStorage
 * @param key Storage名称
 * @returns {String} Storage值
 */
export function localGet(key) {
    const value = window.localStorage.getItem(key);
    try {
        return JSON.parse(window.localStorage.getItem(key));
    } catch (error) {
        return value;
    }
}

/**
 * @description 存储localStorage
 * @param key Storage名称
 * @param value Storage值
 */
export function localSet(key, value) {
    window.localStorage.setItem(key, JSON.stringify(value));
}

/**
 * @description 清除localStorage
 * @param key Storage名称
 */
export function localRemove(key) {
    window.localStorage.removeItem(key);
}

/**
 * 清除所有localStorage
 * @returns {String}
 */
export function localClear() {
    window.localStorage.clear();
}

/**
 * @description 对象数组深克隆
 * @param obj 源对象
 * @returns {obj} 克隆后的对象
 */
export function deepCopy(obj) {
    let newObj;
    try {
        newObj = obj.push ? [] : {};
    } catch (error) {
        newObj = {};
    }
    for (let attr in obj) {
        if (typeof obj[attr] === "object") {
            newObj[attr] = deepCopy(obj[attr]);
        } else {
            newObj[attr] = obj[attr];
        }
    }
    return newObj;
}

/**
 * @description 判断数据类型
 * @param val 需要判断类型的数据
 * @returns {string} 数据类型
 */
export function isType(val) {
    if (val === null) return "null";
    if (typeof val !== "object") return typeof val;
    else return Object.prototype.toString.call(val).slice(8, -1).toLocaleLowerCase();
}

/**
 * @description 生成随机数
 * @param min 最小值
 * @param max 最大值
 * @returns {number}
 */
export function randomNum(min, max) {
    let num = Math.floor(Math.random() * (min - max) + max);
    return num;
}

/**
 * @description 递归查询当前路由所对应的tabPane（暂时没用了）
 * @param menuList 菜单列表
 * @param path 当前地址
 * @returns {Array} 当前路由所对应的tabPane
 */
export function getTabPane(menuList, path) {
    let result;
    for (let item of menuList || []) {
        if (item.path === path) result = item;
        const res = getTabPane(item.children, path);
        if (res) result = res;
    }
    return result;
}

/**
 * 使用递归处理路由菜单
 * @param newArr 所有菜单数组
 */
export function handleRouter(routerList, newArr = []) {
    routerList.forEach((item) => {
        typeof item === "object" && item.path && newArr.push(item.path);
        item.children && item.children.length && handleRouter(item.children, newArr);
    });
    return newArr;
}

/**
 * @description 格式化表格单元格默认值
 * @param row 行
 * @param col 列
 * @param callValue 当前单元格值
 * @return {String} 格式化后的值
 * */
export function defaultFormat(row, col, callValue) {
    // 如果当前值为数组,使用 / 拼接（根据需求自定义）
    if (isArray(callValue)) return callValue.length ? callValue.join(" / ") : "-";
    return callValue ?? "-";
}

/**
 * @description 根据枚举列表查询当需要的数据
 * @param callValue 当前单元格值
 * @param enumData 枚举列表
 * @param type 过滤类型（目前只有 tag）
 * @return {String} 格式化后的值
 * */
export function filterEnum(callValue, enumData = [], type) {
    let filterData = enumData.find(item => item.value === callValue);
    if (type == "tag") return filterData?.tagType ? filterData.tagType : "";
    return filterData ? filterData.label : "-";
}

/**
 * @description 获取浏览器默认语言
 * @returns {String} 语言
 */
export function getBrowserLang() {
    let browserLang = navigator.language;
    let defaultBrowserLang = "";
    if (browserLang.toLowerCase() === "cn" || browserLang.toLowerCase() === "zh" || browserLang.toLowerCase() === "zh-cn") {
        defaultBrowserLang = "zh";
    } else {
        defaultBrowserLang = "en";
    }
    return defaultBrowserLang;
}

/**
 * 递归转换数组对象内的值
 * 
 */
export function traversalTree(arr) {
    let list = [];
    arr.map(item => {
        const newData = {};
        newData['value'] = item.id;
        newData['label'] = item.label;
        newData['children'] = item.children ? traversalTree(item.children) : null;
        list.push(newData);
    })
    return list
}

/**
 * 获取当前日期
 */
export function getCurrentDate() {
    const date = new Date();
    const y = date.getFullYear();
    let month = date.getMonth() + 1;
    let day = date.getDate();
    month = (month > 9) ? month : ("0" + month);
    day = (day < 10) ? ("0" + day) : day;
    return y + "-" + month + "-" + day;
}
// 获取assets静态资源
export const getAssetsFile = (url) => {
    return new URL(`../assets/img/${url}.png`, import.meta.url).href
}
// 两个日期时间
export function countTime(startTime, endTime) {
    const end = new Date(endTime);
    const start = new Date(startTime);
    let diff = end.getTime() - start.getTime();
    const scale = Math.floor(diff / (60 * 1000));
    return scale
}
// 获取当前日期
function add0(m) {
    return m < 10 ? '0' + m : m
};
export function formatTime(date) {
    const time = new Date(date);
    const y = time.getFullYear();
    const m = time.getMonth() + 1;
    const d = time.getDate();
    const h = time.getHours();
    const mm = time.getMinutes();
    const s = time.getSeconds();
    return y + '-' + add0(m) + '-' + add0(d) + ' ' + add0(h) + ':' + add0(mm) + ':' + add0(s);
}
/**
 * @description 数组去重
 */
export function unique(arr, id) {
    const res = new Map();
    return arr.filter(arr => !res.has(arr[id]) && res.set(arr[id], arr), 1);
}
